package org.baicaixiaozhan.learncommon.util.annotation;

import org.baicaixiaozhan.learncommon.util.accesslimit.AccessLimiter;

import java.lang.annotation.*;

/**
 * DESC: 访问限制
 *
 * @since 2021-07-01
 * @author baicaixiaozhan
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface AccessLimit {

    /**
     * 请求数，与 {@link AccessLimit#timeOfMinutes()} 同用，表示特定分钟数内允许多少次请求
     */
    @Beta(type = BetaType.UNSTABLE)
    long count() default 0L;

    /**
     * 分钟数，与 {@link AccessLimit#count()} 同用，表示特定分钟数内允许多少次请求
     */
    @Beta(type = BetaType.UNSTABLE)
    long timeOfMinutes() default 0L;

    /**
     * 以哪种模式来实现访问限制，接收 {@link AccessLimiter} 的实现类
     */
    Class<?> value() default AccessLimiter.class;

}
